package com.xique.park.controller.client;

import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper;

import com.xique.common.core.utils.JzyAloossUtil;
import com.xique.common.core.utils.OrikaUtil;
import com.xique.common.core.utils.StringUtils;
import com.xique.common.core.web.controller.BaseController;
import com.xique.common.core.web.domain.AjaxResult;
import com.xique.common.core.web.page.TableDataInfo;
import com.xique.common.log.annotation.Log;
import com.xique.common.log.enums.BusinessType;
import com.xique.park.bean.domain.*;
import com.xique.park.bean.domain.client.ClientLaneConfig;
import com.xique.park.bean.domain.client.ParkClient;
import com.xique.park.bean.request.client.*;
import com.xique.park.bean.vo.client.*;
import com.xique.park.service.biz.service.IClientBizService;
import com.xique.park.service.service.*;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * @author: caogq
 * @Date: 2021/7/26 09:01
 * @Description:
 */
@Controller
@RequestMapping("/client")
public class ParkClientApiController extends BaseController {

//    @Autowired
//    private IClientBizService clientBizService;
//
//    @Autowired
//    private IParkCarMngtypeService parkCarMngtypeService;
//
//    @Autowired
//    private IParkClientService parkClientService;
//
//    @Autowired
//    private IParkInService parkInService;
//
//    @Autowired
//    private IParkCarService parkCarService;
//
//    @Autowired
//    private IParkOnService parkOnService;
//
//    @Autowired
//    private IParkOutService parkOutService;
//
//    @Autowired
//    private JzyAloossUtil jzyAloossUtil;
//
//    @Autowired
//    private IClientLaneConfigService clientLaneConfigService;
//
//    @Autowired
//    private IParkLaneService parkLaneService;
//
//    @Autowired
//    private CommandService commandService;
//
//
//    @GetMapping("/homePageInfo")
//    @ResponseBody
//    @ApiOperation("岗亭首页信息")
//    public AjaxResult homePageInfo(@RequestParam("clientId") String clientId)
//    {
//        ClientHomePageVo clientHomePageVo = clientBizService.getHomePageInfo(clientId);
//
//        return AjaxResult.success(clientHomePageVo);
//    }
//
//    @GetMapping("/parkOn/mngtype")
//    @ResponseBody
//    @ApiOperation("车辆管理类型列表(搜索条件下拉框)")
//    public AjaxResult mngtype(@RequestParam("parkId") Long parkId)
//    {
//        ParkCarMngtype parkCarMngtype = new ParkCarMngtype();
//        parkCarMngtype.setParkId(parkId);
//        List<ParkCarMngtype> list = parkCarMngtypeService.selectParkCarMngtypeList(parkCarMngtype);
//        List<ClientCommonVo> vos = OrikaUtil.converts(list, ClientCommonVo.class, Collections.singletonMap("mngTypeLable", "name"));
//        return AjaxResult.success(vos);
//    }
//
//
//    @PostMapping("/parkOn/list")
//    @ResponseBody
//    @ApiOperation("在场记录")
//    public TableDataInfo parkOnList(@RequestBody ClientSelectParkOnRequest request)
//    {
//
//        if (StringUtils.isEmpty(request.getClientId())){
//            return getDataTable(new ArrayList<>());
//        }
//        String clientId = request.getClientId();
//        ParkClient parkClient = parkClientService.selectParkClientById(Long.valueOf(clientId));
//        request.setClientCode(parkClient.getCode());
//        request.setParkId(String.valueOf(parkClient.getParkId()));
////        startPage();
//
//        String orderByColumn = request.getOrderByColumn();
//        String isAsc = request.getIsAsc();
//        if (StringUtils.isEmpty(orderByColumn) || StringUtils.isEmpty(isAsc)){
//            orderByColumn = "id";
//            isAsc = "desc";
//        }
//        PageHelper.startPage(request.getPageNum(), request.getPageSize(), StringUtils.toUnderScoreCase(orderByColumn) + " " + isAsc);
//
//        List<ParkOn> clientParkOnList = clientBizService.getClientParkOnList(request);
//        TableDataInfo dataTable = getDataTable(clientParkOnList);
//        List<ClientParkOnRecordVo> clientParkOnRecordVos = clientBizService.convetParkOnVoList(clientParkOnList);
//        dataTable.setRows(clientParkOnRecordVos);
//        return dataTable;
//    }
//
//
//    @GetMapping("/device/list")
//    @ResponseBody
//    @ApiOperation("岗亭设备列表")
//    public TableDataInfo deviceList(@RequestParam("clientId") String clientId,
//                                 @RequestParam(value = "pageNum",required = false) Integer pageNum,
//                                 @RequestParam(value = "pageSize",required = false) Integer pageSize,
//                                 @RequestParam(value = "isAsc",required = false) String isAsc,
//                                 @RequestParam(value = "orderByColumn",required = false) String orderByColumn )
//    {
//        startPage();
//        List<ParkDeviceNew> deviceNewList = clientBizService.getClientdeviceList(clientId);
//        TableDataInfo dataTable = getDataTable(deviceNewList);
//        List<ClientDeviceVo> clientDeviceVos = OrikaUtil.converts(deviceNewList, ClientDeviceVo.class);
//        dataTable.setRows(clientDeviceVos);
//        return dataTable;
//    }
//
//    @PostMapping("/inOut/list")
//    @ResponseBody
//    @ApiOperation("出入场记录")
//    public TableDataInfo clientInOnList(@RequestBody ClientInOutRecordRequest request)
//    {
//        if (StringUtils.isEmpty(request.getClientId())){
//            return getDataTable(new ArrayList<>());
//        }
//
//        //搜索条件封装
//        ParkClient parkClient = parkClientService.selectParkClientById(Long.valueOf(request.getClientId()));
//        ParkIn search = OrikaUtil.convert(request, ParkIn.class);
//        search.setParkId(parkClient.getParkId());
//        search.setInCarPlate(request.getPlate());
////        startPage();
////        String orderByColumn = request.getOrderByColumn();
////        String isAsc = request.getIsAsc();
////        if (StringUtils.isEmpty(orderByColumn) || StringUtils.isEmpty(isAsc)){
////            orderByColumn = "in_time";
////            isAsc = "desc";
////        }
//        PageHelper.startPage(search.getPageNum(), search.getPageSize(),"in_time" + " " + "desc");
//
//        List<ParkInOut> parkInOuts = parkInService.selectParkInOutList(search);
//        TableDataInfo dataTable = getDataTable(parkInOuts);
//        //bean映射 & 字典转义
//        List<ClientInOutVo> clientInOutVos = clientBizService.convertParkInoutToVo(parkInOuts);
//        dataTable.setRows(clientInOutVos);
//        return dataTable;
//    }
//
//    /**
//     * 根据条件查询车辆相关信息
//     * 1、查询车辆记录；
//     * 2、多个车牌分割开，查询每个车牌的在场状态；
//     * 3、如果在场的话，查询入场时间等信息；
//     * 4、如果不在场，查询最近一次出场时间；
//     */
//    @GetMapping("/multCar/list")
//    @ResponseBody
//    @ApiOperation("多位多车查询")
//    public TableDataInfo list( ClientMultCarListRequest request) {
//        ParkCar parkCar = OrikaUtil.convert(request, ParkCar.class);
//
////        PageHelper.startPage(request.getPageNum(), request.getPageSize(),"create_time desc");
//        if(StringUtils.isEmpty(parkCar.getPlate()) && StringUtils.isEmpty(parkCar.getSeatNo())  && StringUtils.isEmpty(parkCar.getUserName())  && StringUtils.isEmpty(parkCar.getPhone())  && StringUtils.isEmpty(parkCar.getAddress()) ){
//            List<ParkCar> list1 = new ArrayList<>();
//            return getDataTable(list1);
//        }else{
//            parkCar.setIsExpire("1");
//            List<ParkCar> list = parkCarService.selectParkCarList(parkCar);
//            if(CollectionUtils.isNotEmpty(list)){
//                String bindPlates;
//                String[] plateArr;
//                int onCarCnt = 0;
//                for(ParkCar car: list){
//                    bindPlates = car.getBindPlates();
//                    List<ParkOn> parkOnList = new ArrayList<>();
//                    if(StringUtils.isNotEmpty(bindPlates)){
//                        plateArr = bindPlates.split(",");
//                        car.setCarConts(plateArr.length);
//                        for(String plate: plateArr){
//                            ParkOn parkOn = new ParkOn();
//                            //查询车牌的在场信息
//                            parkOn.setPlate(plate);
//                            parkOn.setParkId(parkCar.getParkId());
//                            List<ParkOn> tempParkOnList = parkOnService.selectParkOnList(parkOn);
//                            if(CollectionUtils.isNotEmpty(tempParkOnList)){
//                                tempParkOnList.stream().forEach(item -> item.setIsOn("Y"));
//                                tempParkOnList.stream().forEach(item -> item.setInPic(jzyAloossUtil.getGetObjectUrl(item.getInPic()).toString()));
//                                parkOnList.addAll(tempParkOnList);
//                                onCarCnt += tempParkOnList.size();
//                            }else{
//                                parkOn.setIsOn("N");
//                                //查询该车辆在该车场最近一次出场时间
//                                ParkOut parkOut = new ParkOut();
//                                parkOut.setParkId(parkCar.getParkId());
//                                parkOut.setOutCarPlate(plate);
//                                ParkOut recentParkOut = parkOutService.selectRecentParkOut(parkOut);
//                                if(null != recentParkOut){
//                                    parkOn.setOutLaneName(recentParkOut.getLaneName());
//                                    parkOn.setOutPic(jzyAloossUtil.getGetObjectUrl(recentParkOut.getOutPic()).toString());
//                                    parkOn.setOutStatus(recentParkOut.getStatus());
//                                    parkOn.setOutStatusLabel(recentParkOut.getStatusLabel());
//                                    parkOn.setOutTime(recentParkOut.getOutTime());
//                                }
//                                parkOnList.add(parkOn);
//                            }
//                        }
//                        car.setParkOnList(parkOnList);
//                        car.setOnCarCount(onCarCnt);
//                        int remainSpaceCount = (null != car.getSpaces()) ? (int) (car.getSpaces() - car.getOnCarCount()) : 0;
//                        car.setRemainSpaceCount(0 < remainSpaceCount ? remainSpaceCount : 0 );
//                    }
//                }
//            }
//            TableDataInfo dataTable = getDataTable(list);
//            dataTable.setRows(OrikaUtil.converts(list,ClientMultCarsVo.class));
//            return dataTable;
//        }
//    }
//
//    /**
//     * 修改保存岗亭通道配置表
//     */
//    @Log(title = "岗亭通道中间配置修改", businessType = BusinessType.UPDATE)
//    @PostMapping("/lane/config/edit")
//    @ResponseBody
//    @ApiOperation("通道配置修改")
//    public AjaxResult editSave(@RequestBody ClientLaneConfig clientLaneConfig)
//    {
//        return toAjax(clientLaneConfigService.updateClientLaneFunction(clientLaneConfig));
//    }
//
//    @GetMapping("/lane/detail")
//    @ResponseBody
//    @ApiOperation("通道明细")
//    public AjaxResult laneDetail(@RequestParam("laneId") Long laneId,@RequestParam("clientId") Long clientId)
//    {
//
//        ClientLaneConfig clientLaneConfig = new ClientLaneConfig();
//        clientLaneConfig.setClientId(clientId);
//        clientLaneConfig.setLaneId(laneId);
//        List<ClientLaneConfig> clientLaneConfigs = clientLaneConfigService.selectClientLaneConfigList(clientLaneConfig);
//        if (clientLaneConfigs.isEmpty()){
//            return error();
//        }
//        ParkLane parkLane = parkLaneService.selectParkLaneById(laneId);
////        List<ClientLaneVo> clientLaneVos = parkLaneService.selectParkLaneByClientCode(1L, "");
////        ClientLaneVo laneVo = OrikaUtil.convert(parkLane, ClientLaneVo.class);
//        ClientLaneVo laneVo = new ClientLaneVo();
//        laneVo.setId(parkLane.getId().toString());
//        laneVo.setName(parkLane.getName());
//        laneVo.setLaneType(parkLane.getLaneType());
//        laneVo.setLaneTypeLabel(parkLane.getLaneTypeLabel());
//        laneVo.setModel(parkLane.getModel());
//        laneVo.setModelLabel(parkLane.getModelLabel());
//        laneVo.setConfig(JSONObject.parseObject(clientLaneConfigs.get(0).getConfig()));
//
//        return AjaxResult.success(laneVo);
//    }
//
//    @Log(title = "岗亭手动入场 | 出场", businessType = BusinessType.COMMAND)
//    @PostMapping("/handCarInOrOut")
//    @ResponseBody
//    @ApiOperation("岗亭手动入场 | 出场")
//    public AjaxResult handCarInOrOut(@RequestBody ClientHandInOutRequest clientHandInOutRequest){
//        ParkOn parkOn = OrikaUtil.convert(clientHandInOutRequest, ParkOn.class);
//        Object obj = commandService.markCarInOrOut(Long.valueOf(clientHandInOutRequest.getParkId()),clientHandInOutRequest.getSn(),clientHandInOutRequest.getIsGate(),parkOn);
//        return AjaxResult.success("手动入场|出场命令下发",obj);
//    }
//
//    @Log(title = "车牌纠正", businessType = BusinessType.UPDATE)
//    @PostMapping("/plate/edit")
//    @ResponseBody
//    public AjaxResult editPlate( @RequestBody ClientPlateEditRequest request) {
//        AjaxResult result = AjaxResult.error();
//        try {
//            result = parkClientService.editParkOnPlate(request);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return result;
//    }
//
//    @GetMapping("/parkOn/getUrl")
//    @ResponseBody
//    public AjaxResult getParkOnUrl(String recordId){
//        ParkOn parkOn = parkOnService.selectParkOnById(Long.valueOf(recordId));
//        String objectName = parkOn.getInPic();
//        if(null != objectName && !"null".equals(objectName) && StringUtils.isNotEmpty(objectName)){
//            URL url = jzyAloossUtil.getGetObjectUrl(objectName);
//            return AjaxResult.success("图片访问路径",url.toString());
//        }else{
//            return AjaxResult.success("无图片","[表情]_pic.png");
//        }
//
//    }
//
//
//    @PostMapping("/handOut/info")
//    @ResponseBody
//    @ApiOperation("手动出场信息")
//    public AjaxResult handOutInfo(@Validated @RequestBody ClientHandOutInfoRequest request){
//       return clientBizService.handOutInfo(request);
//    }
//
//
//    @PostMapping("/out/cancelPass")
//    @ResponseBody
//    @ApiOperation("取消放行")
//    public AjaxResult cancelPass(@Validated @RequestBody ClientCancelPassRequest request){
//        return clientBizService.cancelPass(request);
//    }
//
//    @GetMapping("/home/space")
//    @ResponseBody
//    @ApiOperation("车位信息")
//    public AjaxResult spaceInfo(@RequestParam("parkId") String parkId) {
//        return clientBizService.getSpaceInfo(parkId);
//    }
//
//    @PostMapping("/home/space/edit")
//    @ResponseBody
//    @ApiOperation("修改剩余车位")
//    public AjaxResult spaceEdit(@Validated @RequestBody ClientSpaceEditRequest request) throws Exception {
//        return clientBizService.spaceEdit(request);
//    }
//
//    @GetMapping("lane/info")
//    @ResponseBody
//    @ApiOperation("通道信息")
//    public AjaxResult laneInfo(@RequestParam("deviceId") Long deviceId) {
//        return clientBizService.getLaneInfo(deviceId);
//    }
//
//    @PostMapping("/record/cashPass")
//    @ResponseBody
//    @ApiOperation("现金收费记录")
//    public TableDataInfo cashPassList(@Validated @RequestBody ClientCashPassListRequest request ) {
//
//        PageHelper.startPage(request.getPageNum(), request.getPageSize());
//        List<ClientCashPassListVo> cashPassList = clientBizService.clientCashPassList(request);
//        return getDataTable(cashPassList);
//    }
//
//
//    @GetMapping("parkIn/detail")
//    @ResponseBody
//    @ApiOperation("入场信息详情")
//    public AjaxResult parkInDetail(@RequestParam("inId") Long inId) {
//        return clientBizService.selectParkInDetail(inId);
//    }
//
//    @GetMapping("parkOut/detail")
//    @ResponseBody
//    @ApiOperation("出场信息详情")
//    @ApiResponses({
//            @ApiResponse(code = 200,message = "OK",response = ClientParkOutVo.class)
//    })
//    public AjaxResult parkOutDetail(@RequestParam("outId") Long outId) {
//        return clientBizService.selectParkOutDetail(outId);
//    }
}
